列挙
列挙は、ユーザー定義変数を宣言するためのカンマ区切りのメンバー (列挙値) のリストで構成されるユーザー定義データ型です。
で列挙を宣言します DUT クリックしてプロジェクト内に既に作成されているオブジェクト [オブジェクトを追加]。
アプリケーションコードでは、識別子 <enumeration name>.<member name> がプロジェクト内でグローバルに認識される定数として、列挙メンバを使用することができます。
詳細については、以下を参照してください。 DUT
デクラレーション
構文
{attribute 'strict'}
TYPE <enumeration name> :
(
<member name> := <value>
) <base data type> := <initialization> ;
END_TYPE
| [オプション] プラグマには、以下のように厳密な型テストを行うという効果があります。 プラグマはオプションですが、推奨されます。 |
| コードでデータ型として使用できる列挙の名前 例: |
| 任意の数のメンバー、ただし少なくとも 2 人のメンバー 列挙は、カンマで区切られたメンバー名を丸括弧で囲んだリストです。閉じ角括弧の前の最後のメンバーにはカンマは必要ありません。すべてのメンバーのデータ型は同じです メンバーの値は自動的に初期化されます。0 から始まり、値は連続的に 1 ずつ増加します。個々のメンバーに固定の初期値を明示的に割り当てることもできます 例: |
| [オプション] 次の基本データ型のいずれかを明示的に割り当てることができます。
デフォルト: |
| [オプション] メンバーの 1 つを初期メンバーとして明示的に宣言できます。 デフォルト:初期化が明示的に指定されていない場合、初期化は最上位メンバーで自動的に実行されます。 |
{attribute 'qualified_only'}
{attribute 'strict'}
TYPE COLOR_BASIC :
(
yellow,
green,
blue,
black
) // Basic data type is INT, default initialization for all COLOR_BASIC variables is yellow
;
END_TYPE明示的な基本データ型による列挙
IEC 61131-3 スタンダードの拡張
列挙宣言の基本データ型は INT デフォルトです。ただし、別の整数データ型を明示的に基にした列挙を宣言することもできます
基本データ型による列挙 DWORD
TYPE COLOR :
(
white := 16#FFFFFF00,
yellow := 16#FFFFFF00,
green := 16#FF00FF00,
blue := 16#FF0000FF,
black := 16#88000000
) DWORD := black
; // Basic data type is DWORD, default initialization for all COLOR variables is black
END_TYPE厳格なプログラミング規則
重要
で CODESYS V3.5 SP7 以降では、プラグマが使われています。 {attribute 'strict'} 列挙を宣言すると、最初の行に自動的に追加されます。
プラグマを追加すると、厳密なプログラミングルールが有効になります。 {attribute 'strict'}。
列挙型メンバーによる算術演算
たとえば、列挙型変数を a のカウンタ変数として使用することはできません。
FORループ。列挙値に対応しない定数値の列挙メンバーへの代入
列挙型として別のデータ型を持つ非定数変数の列挙メンバーへの代入
算術演算を行うと、宣言されていない値が列挙メンバーに割り当てられる可能性があります。より適切なプログラミング・スタイルは、を使用することです。 SWITCH/CASE メンバー値を処理するためのステートメント。
列挙変数の宣言と初期化
構文
<variable name> : <enumeration name> := <initialization> ;
ユーザー定義の列挙を使用して列挙変数を宣言する場合、変数は列挙メンバーで初期化できます。
PROGRAM PLC_PRG
VAR
colorCar: COLOR;
colorTaxi : COLOR := COLOR.yellow;
END_VAR変数 colorCar で初期化されます COLOR.black。これが、型のすべての列挙型変数のデフォルト初期化です COLOR 型宣言でこのように定義されています。 colorTaxi 独自の初期化機能があります。
初期化が指定されていない場合、初期化値は 0 です。
PROGRAM PLC_PRG
VAR
cbFlower : COLOR_BASIC;
cbTree: COLOR_BASIC := COLOR_BASIC.green;
END_VAR変数 cbFlower で初期化されます COLOR_BASIC.yellow。これが、型のすべての列挙型変数のデフォルト初期化です COLOR_BASIC。列挙宣言では初期化するメンバーを指定していないため、システムは値が 0 のメンバーで自動的に初期化されます。通常、これは列挙メンバーのうちの最初のメンバーです。ただし、最初の位置にはないが明示的に 0 で初期化された別のメンバーでもかまいません
変数 cbTree 明示的な初期化が行われている。
タイプと変数の両方に値を指定しない場合は、次のルールが適用されます。列挙に 0 の値が含まれている場合、この値がデフォルトの初期化になり、含まれていない場合は、リストの最初のメンバーになります。
0 メンバーによる初期化
TYPE ENUM :
(
e1 := 2,
e2 := 0,
e3
)
;
END_TYPE
PROGRAM PLC_PRG
VAR
e : ENUM;
END_VAR変数 e で初期化されます ENUM.e2。
最初のメンバーによる初期化
TYPE ENUM2 :
(
e1 := 3,
e2 := 1,
e3
)
;
END_TYPE
PROGRAM PLC_PRG
VAR
e2 : ENUM2;
END_VAR変数 e2 で初期化されます ENUM.e1。
列挙メンバーへのユニークなアクセス
IEC 61131-3 スタンダードの拡張
列挙メンバーは、識別子 <enumeration name>.<member name>. を使用して定数変数としても使用できます。列挙メンバーはプロジェクト全体で認識され、それらへのアクセスは一意です。したがって、メンバー名は異なる列挙で使用できます。
メンバー: blue
PROGRAM PLC_PRG
VAR
cbFlower : COLOR_BASIC;
colorCar : COLOR;
END_VAR
(* unambiguous identifiers although the component names are identical *)
cbFlower := COLOR_BASIC.blue;
colorCar := COLOR.blue;
(* invalid code *)
cbFlower := blue;
colorCar := blue;詳細については、以下を参照してください。 列挙型名前空間。